var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var hbs = require('hbs');

var flash = require('connect-flash');

var session = require("express-session");
var MongoStore = require('connect-mongo')(session);
var db = require('./database/db');

var index = require('./routes/index');
var users = require('./routes/users');
var posts = require('./routes/posts');
var upload = require('./upload/testUpload');
var app = express();

app.use(flash());


app.use(session({
    secret:"myzhibie",//secret的值建议使用随机字符串
    cookie: {maxAge: 1 * 1000 * 60*60}, // 过期时间（毫秒）
    store:new MongoStore({
        mongooseConnection:db.dbCon
    })
}));


// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html');
app.engine('.html',require('ejs').__express);//两个下划线


var blocks = {};

hbs.registerHelper('extend', function(name, context) {
    var block = blocks[name];
    if (!block) {
        block = blocks[name] = [];
    }

    block.push(context.fn(this)); // for older versions of handlebars, use block.push(context(this));
});

hbs.registerHelper('block', function(name) {
    var val = (blocks[name] || []).join('\n');

    // clear the block
    blocks[name] = [];
    return val;
});

// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));









//登录拦截器
app.all('/*', function(req, res, next){
    if (!req.session.user) {
        if (req.url == "/login") {
            next();//如果请求的地址是登录则通过，进行下一个请求
        }
        else if(req.url == "/reg"){
            next();//如果请求的地址是注册则通过，进行下一个请求

        }
        else {
            res.redirect('/login');
        }
    }
    else {
        next();
    }
});




app.use('/', index);
app.use('/users', users);
app.use('/upload',upload);
app.use('/post',posts);


// error handlers
app.use(function(req,res,next){
//    res.locals.user=req.session.user;

    if (!req.session.user) {
        if (req.url == "/login") {
            next();//如果请求的地址是登录则通过，进行下一个请求
        }
        else if(req.url == "/reg"){
            next();//如果请求的地址是登录则通过，进行下一个请求
        }
        else {
            // res.redirect('/login');
            res.writeHead(302, {'Location': '/login'});
            console.log(res._header);
            res.end();
        }
    }
    else {

        var err=req.session.error;
        var success=req.session.success;
        var user=req.session.user;
        var mess=req.session.message;
        delete req.session.success;
        delete  req.session.error;
        delete  req.session.message;
        if(err){
            res.locals.message="*"+err;
        }
        if(mess){
            res.locals.message="*"+mess;
        }
        if(success){
            res.locals.success=success;
        }
        if(user){
            res.locals.user=user.name;
        }
        next();
    }

});

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};
  // render the error page
  res.status(err.status || 500);
  res.render('error');
});




module.exports = app;
